package cn.fornever.dbdoc.util;

import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.beans.BeansWrapperBuilder;
import freemarker.template.*;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FreeMarkerUtil {
    private static BeansWrapper BEANS_WRAPPER = new BeansWrapperBuilder(Configuration.VERSION_2_3_27).build();
    public static Template getTemplate(String name) {
        Template template = null;
        try {
            // 通过Freemarker的Configuration读取相应的ftl
            // 这里是对应的你使用jar包的版本号：<version>2.3.23</version>
            Configuration configuration = new Configuration(Configuration.VERSION_2_3_27);
            configuration.setClassicCompatible(true);
            // 如果是maven项目可以使用这种方式
//            configuration.setDirectoryForTemplateLoading(new File("\\templates"));
            // 第二个参数 为你对应存放.ftl文件的包名
            configuration.setClassForTemplateLoading((new File("/")).getClass(), "/templates");
            template = configuration.getTemplate(name);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return template;
    }

    public static void write(String templateName, Object data, File outputFile) {
        try (FileWriter out = new FileWriter(outputFile)) {
            // 通过一个文件输出流，就可以写到相应的文件中，此处用的是绝对路径
            Template temp = getTemplate(templateName);
            temp.process(data, out);
        } catch (IOException | TemplateException e) {
            e.printStackTrace();
        }
    }

    public static TemplateModel getStaticModel(Class clz) {
        try {
            return BEANS_WRAPPER.getStaticModels().get(clz.getName());
        } catch (TemplateModelException e) {
            e.printStackTrace();
        }
        return null;
    }
}
